package util

import (
	"fmt"
	"strings"
)

type TagType string

const (
	A   TagType = "a"
	DIV TagType = "DIV"
)

var HtmlTagMap = map[string]TagType{"a": A, "div": DIV}

type HtmlTag struct {
	Content   string
	TagType   TagType
	Attr      map[string]string
	FatherTag *HtmlTag
	SonTag    []HtmlTag
}

// GetText 获取 html 中的文本内容(标签外的内容)
func GetText(html string) HtmlTag {
	fmt.Println(HtmlTagMap)
	// 不需要过滤
	// <a></a>
	if len(html) < 7 || !strings.Contains(html, "<") {
		return HtmlTag{Content: html}
	}

	htmlRune := []rune(html)
	result := HtmlTag{}
	//curHtmlTag := result

	startIndex := 0
	endIndex := 0

	for i := range htmlRune {
		//fmt.Println(string(htmlRune[i]))

		if htmlRune[i] == '<' {
			// 标签开始的判断
			startIndex = i
		}
		if htmlRune[i] == '>' {
			endIndex = i
			fmt.Println(string(htmlRune[startIndex : endIndex+1]))
		}

	}

	/*text := make([]rune, 0)
	var endTagIndex, startTagIndex int
	var startTag []rune
	tag := make([]string, 0)
	tagMap := make(map[string]int, 0)
	firstBlank := true

	runeHtml := []rune(html)
	for i := 0; i < len(runeHtml); i++ {
		if runeHtml[i] == '<' {
			if runeHtml[i+1] == '/' {
				for endTagIndex = i + 1; endTagIndex < len(runeHtml); endTagIndex++ {
					if runeHtml[endTagIndex] == '>' {
						log.Println("结束标签", string(runeHtml[i:endTagIndex+1]))
						break
					}
				}
				// 获取 栈 中的 第一个标签 如果匹配 结束标签 出栈
				// 下一次从 endTagIndex + 1 开始找
				i = endTagIndex + 1
			} else {
				for startTagIndex = i + 1; startTagIndex < len(runeHtml); startTagIndex++ {
					switch runeHtml[startTagIndex] {
					case '<':
						// 说明刚刚的开头无效
						i = startTagIndex
					case ' ':
						// <a href="" onClick>
						if firstBlank {
							startTag = runeHtml[i : startTagIndex+1]
							log.Println("带空格", string(startTag))
							firstBlank = false
						}
					case '/':
						// <br/>
						if runeHtml[startTagIndex+1] == '>' {
							log.Println("单个标签", string(runeHtml[i:startTagIndex+2]))
							// />
						}
					case '>':
						// <div> 获取到了一个完整的标签
						startTag = runeHtml[i : startTagIndex+1]
						goto foreachEnd
					}
				}
			foreachEnd:
				if len(startTag) > 0 {
					log.Println("获取到 < 开始标签", string(startTag))
					// 获取构造的 tag <a> <div>...
					tempTag := string(startTag)
					// 往栈中添加 tag
					tag = append(tag, string(startTag))
					// 统计 tag 出现的次数
					if count, ok := tagMap[tempTag]; ok {
						tagMap[tempTag] = count + 1
					} else {
						tagMap[tempTag] = 1
					}
				}
				startTag = []rune{}
				firstBlank = true
			}
		}
	}
	return string(text)*/
	return result
}
